home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
boot
/
czesc_2
/
wiconify
/
wutilities.lzh
/
Screen
/
ScreenToFront.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-04-19
|
5KB
|
172 lines
/*
* SCREENTOFRONT A small utility to manipulate the screen positions
* via a CLI command. Can be used within EXECUTE files,
* and the STARTUP-SEQUENCE.
*
* Copyright 1990 by Davide P. Cervone, all rights reserved.
* You may use this code, provided this copyright notice is kept intact.
*/
#define INTUITION_PREFERENCES_H /* don't need 'em */
#include <intuition/intuitionbase.h>
#define USAGE "ScreenToFront [ACTIVATE] [screen]"
static char *program = "ScreenToFront";
static char *version = "v1.3";
static char *copyright =
"Copyright (C) 1990 by Davide P. Cervone, all rights reserved.";
#define INTUITION_REV 0L
extern struct IntuitionBase *IntuitionBase;
extern struct IntuitionBase *OpenLibrary();
#define ARGMATCH(s) (stricmp(argv[1],s) == 0)
#define TOUPPER(c) (((c)>='a'&&(c)<='z')?(c)-'a'+'A':c)
/*
* PrefixMatch()
*
* Case-insensitive prefix match. NULL pointers and empty strings
* only match themselves, and are not considered prefixes to any string.
*
* Return <0 if the first is smaller than the second,
* =0 if the first is a prefix of the second,
* >1 if the first is larger than the second.
*/
int PrefixMatch(s1,s2)
char *s1,*s2;
{
int match = -1;
if (s1 && *s1)
{
if (s2)
{
while (TOUPPER(*s1) == TOUPPER(*s2) && *s2 != 0) s1++,s2++;
if (*s1 == 0) match = 0; else match = *s1 - *s2;
} else match = 1;
} else if (s2 == NULL || *s2 == 0) match = 0;
return(match);
}
/*
* *FindScreen()
*
* Lock IntuitionBase so nothing happens while we look.
* If there is a name to look for,
* Start at the first screen, and look for a screen whose title
* matches the given name. If none, return NULL.
* Otherwise, use the active screen.
* Unlock Intuition.
* Return the screen pointer found, if any.
*/
static struct Screen *FindScreen(ScreenName)
char *ScreenName;
{
struct Screen *theScreen;
long ILock, LockIBase();
ILock = LockIBase(0L);
if (ScreenName)
{
theScreen = IntuitionBase->FirstScreen;
while (theScreen && PrefixMatch(ScreenName,theScreen->Title))
theScreen = theScreen->NextScreen;
} else {
theScreen = IntuitionBase->ActiveScreen;
}
UnlockIBase(ILock);
return(theScreen);
}
/*
* Print()
*
* Find the standard AmigaDOS output file and write the output string
* to the output file. This is intended as a substitute for printf()
* when no formatting is required, and when you want a small executable.
*/
static void Print(s)
char *s;
{
ULONG OutFile;
extern ULONG Output();
OutFile = Output();
if (OutFile && s) Write(OutFile,s,strlen(s));
}
/*
* Error()
*
* Print the character string, and up to two optional strings, then
* go to a new output line, close Intuition, and exit with an error.
*/
static void Error(s,x1,x2)
char *s,*x1,*x2;
{
Print(s);
if (x1) Print(x1);
if (x2) Print(x2);
Print("\n");
if (IntuitionBase) CloseLibrary(IntuitionBase);
_exit(10L);
}
/*
* main()
*
* If the first argument is ACTIVATE, set the flag and skip the argument.
* If there are too many arguements, show the Usage message.
* If there is one arguemtn make it the screen name.
* Open Intuition; if successful,
* Find the spcified screen (use the active screen if none specified).
* If found, then
* Bring it to the front.
* If we are to activate the screen and it is not already
* active, then activate its first window.
* Otherwise, say we can't find the screen.
* Close Intuition.
* Otherwise, say we can't get Intuition.
*/
void main(argc,argv)
int argc;
char *argv[];
{
char *ScreenName = NULL;
struct Screen *theScreen;
int Activate = FALSE;
if (argc > 1 && ARGMATCH("ACTIVATE")) Activate = TRUE, argv++, argc--;
if (argc > 2) Error("Usage: ",USAGE,NULL);
if (argc > 1) ScreenName = argv[1];
IntuitionBase = OpenLibrary("intuition.library",INTUITION_REV);
if (IntuitionBase)
{
theScreen = FindScreen(ScreenName);
if (theScreen)
{
ScreenToFront(theScreen);
Forbid();
if (Activate && theScreen != IntuitionBase->ActiveScreen)
if (theScreen->FirstWindow) ActivateWindow(theScreen->FirstWindow);
Permit();
} else Error("Can't find screen '",ScreenName,"'");
CloseLibrary(IntuitionBase);
} else Error("Can't Open Intuition Library!",NULL,NULL);
}